'use strict';

const moment = require('moment');
const { STRING, INTEGER, BIGINT, DATE, DATEONLY, NOW, NUMERIC, DECIMAL, BOOLEAN } = require("sequelize").DataTypes;

let UserModel = {
	name:"UserModel",
	define:{
		id:{ type:BIGINT, primaryKey:true, autoIncrement:true },
		account:{
			type:STRING(50),
			allowNull:false,
			defaultValue:'',
			unique:'u_index_user_account',
			field:'account',
			comment:"用户账号"
		},
		password:{ type:STRING(50), allowNull:false, defaultValue:'', field:'password', comment:"用户密码" },
		name:{ type:STRING(50), allowNull:true, defaultValue:'', field:'name', comment:"姓名" },
		idCard:{ type:STRING(20), allowNull:true, defaultValue:'', field:'id_card', comment:"身份证号码" },
		birthday:{ type:DATEONLY, allowNull:true, field:'birthday', defaultValue:null },
		gender:{ type:INTEGER, allowNull:true, defaultValue:0, field:'gender', comment:"性别：0 男，1 女，2 其它" },
		email:{ type:STRING(100), allowNull:true, defaultValue:'', field:'email', comment:"电子邮箱" },
		mobile:{ type:STRING(18), allowNull:true, defaultValue:'', field:'mobile', comment:"手机号码" },
		address:{ type:STRING(100), allowNull:true, defaultValue:'', field:'address', comment:"地址" },
		postcode:{ type:STRING(10), allowNull:true, defaultValue:'', field:'postcode', comment:"邮编" },
		superUser:{
			type:BOOLEAN,
			allowNull:false,
			field:'super_user',
			defaultValue:false,
			comment:"是否内置超级用户，true 是，false 否"
		},
		createdBy:{ type:BIGINT, allowNull:true, defaultValue:null, field:'created_by', comment:"数据记录添加人" },
		createdDate:{
			type:DATE, get() {
				return this.getDataValue('createdDate') ? moment(this.getDataValue('createdDate')).format('YYYY-MM-DD HH:mm:ss') : '';
			},
			allowNull:true, field:'created_date', comment:'数据记录添加时间',defaultValue:NOW,
		},
		updatedBy:{ type:BIGINT, allowNull:true, field:'updated_by', comment:"数据记录最近一次修改人" },
		updatedDate:{
			type:DATE, get() {
				return this.getDataValue('updatedDate') ? moment(this.getDataValue('updatedDate')).format('YYYY-MM-DD HH:mm:ss') : '';
			},
			allowNull:true, field:'updated_date', comment:'数据记录最近一次修改时间',defaultValue:NOW,
		},
		isDeleted:{
			type:BOOLEAN,
			allowNull:false,
			field:'is_deleted',
			defaultValue:false,
			comment:"数据是否被软删除，false 正常数据，true 表示数据被软删除"
		},
		isEnable:{
			type:BOOLEAN,
			allowNull:false,
			field:'is_enable',
			defaultValue:true,
			comment:"用户是否启用，true 表示启用，false 表示禁用"
		},
	},
	options:{
		tableName:'tbl_users',
		// 自定义表名
		// 禁止修改表名，默认情况下，sequelize 将自动将所有传递的模型名称（define的第一个参数）转换为复数
		// 但是为了安全着想，复数的转换可能会发生变化，所以禁止该行为
		freezeTableName:true,

		// 是否需要增加createdAt、updatedAt、deletedAt字段
		timestamps:false,

		// 不需要createdAt字段
		createdAt:'created_date',

		// 将updatedAt字段改个名
		//updatedAt: 'modifiedOn',
		updatedAt:'updated_date',
		// 将deletedAt字段改名
		// 同时需要设置paranoid为true（此种模式下，删除数据时不会进行物理删除，而是设置deletedAt为当前时间
		//deletedAt: 'deletedOn',
		deletedAt:false,
		// paranoid: true
	}
};

module.exports = UserModel;
